package com.example.app.initializer;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

/**
 * @author wangzhuangzhuang
 * @DESC:
 * @date 2022-02-10 10:09
 */
@Component
public class BeanInitTester implements InitializingBean {

	static {
		System.out.println("类初始化 - 静态代码块");
	}

	{
		System.out.println("类初始化 - 非静态代码块");
	}

	public BeanInitTester() {
		System.out.println("类初始化 - 构造函数");
	}

	@Override
	public void afterPropertiesSet() throws Exception {
		System.out.println("类初始化 - afterPropertiesSet 方法！");
	}

	@PostConstruct
	void method() {
		System.out.println("类初始化 - postConstruct 注解方法！");
	}
}

/*
* 常用内容：
* - postConstruct注解方法，该注解所注释的方法会在Bean对象构建完成之后去执行
* - 实现InitializingBean接口的afterPropertiesSet方法，知道该方法实在属性被设置之后执行
类初始化=静态代码块
类初始化=非静态代码块
类初始化=构造函数
类初始化=postConstruct 注解方法!
类初始化=afterPropertiesSet 方法!
* */

